#include <cstdio>
#include <utility>
#include <iostream>
#include <algorithm>
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define mp make_pair
using namespace std;

int n;
int a[21],v[21];

pair<pair<int,int>,int> ans[19];
int pos;
int b[3];
int main()
{
	int T; scanf("%d",&T);
	for (int t,flag;t<T;)
	{
		scanf("%d%d",&t,&n);
		FOR (i,1,n) scanf("%d",&a[i]),v[i]=i;
		flag=1; pos=0;
		for (int z=n-2,jl,ll,rr;z--;)
		{
			jl=0;
			for (int i=1;i<=n;i++)
				if (a[i]==1) { jl=i; break; }
			if (!jl) { flag=0; break; }

			ll=jl-1; if (ll<1) ll=n;
			rr=jl+1; if (rr>n) rr=1;
			if (ll==rr) { flag=0; break; }
			b[0]=v[ll]; b[1]=v[rr]; b[2]=v[jl];
			sort(b,b+3); ans[++pos]=mp(mp(b[0],b[1]),b[2]);
			//cout<<a[ll]<<" "<<a[jl]<<" "<<a[rr]<<endl;
			if (!a[jl]) { flag=0; break; } else a[jl]--;
			if (!a[ll]) { flag=0; break; } else a[ll]--;
			if (!a[rr]) { flag=0; break; } else a[rr]--;
			for (int i=1;i<=n;i++)
				if (a[i]==0)
				{
					for (int j=i+1;j<=n;j++) a[j-1]=a[j],v[j-1]=v[j];
					i--,n--;
				}
		}
		printf("%d ",t);
		if (!flag) puts("N");
		else
		{
			puts("Y");
			sort(ans+1,ans+1+pos);
			for (int i=1;i<=pos;i++)
				printf("%d %d %d\n",ans[i].first.first,ans[i].first.second,ans[i].second);
		}
	}
	return 0;
}

